package com.xzmzhp.service.people.impl;

import com.xzmzhp.constant.ReturnConstant;
import com.xzmzhp.dao.people.PositionMapper;
import com.xzmzhp.pojo.people.Position;
import com.xzmzhp.service.people.PersonnelService;
import com.xzmzhp.service.people.PositionService;
import com.xzmzhp.utils.return_tool.ReturnData;
import com.xzmzhp.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 王源
 * @Date: 2020/11/14 14:36
 * @Description: 部门信息表数据库逻辑实现类
 */
@Service
public class PositionServiceImpl implements PositionService {

    /**
     * 自动注入positionMapper对象
     */
    @Autowired
    private PositionMapper positionMapper;

    @Autowired
    private PersonnelService personnelService;

    /**
     * 查询部门信息表所有数据
     *
     * @return ReturnData对象 成功返回 data 失败返回错误信息和错误状态码
     */
    @Override
    public ReturnData findAll() {
        List<Position> list = positionMapper.findAll();
        if (list != null) {
            return ReturnData.ok(list);
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "没有找到部门信息");
        }
    }

    /**
     * 根据id查询部门名称
     *
     * @param positionId 部门信息表id
     * @return ReturnData对象 成功返回 data 失败返回错误信息和错误状态码
     */
    @Override
    public ReturnData findById(int positionId) {
        Position position = positionMapper.findById(positionId);
        if (position != null) {
            return ReturnData.ok(position);
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "没有找到对应的部门信息");
        }

    }

    /**
     * 根据部门名称查询数据
     *
     * @param positionName 部门名称
     * @return Position对象
     */
    @Override
    public ReturnData findByName(String positionName) {
        Position position = positionMapper.findByName(positionName);
        if (position != null) {
            List<Position> list = new ArrayList<>();
            list.add(position);
            return ReturnData.ok(list);
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "没有找到对应的部门信息");
        }
    }

    /**
     * 添加部门名称
     *
     * @param positionName 部门名称
     * @return ReturnData对象 成功返回默认信息 失败返回错误信息和错误状态码
     */
    @Override
    public ReturnData addPosition(String positionName) {
        Integer i = positionMapper.addPosition(positionName);
        if (i > 0) {
            return ReturnData.ok();
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "部门信息添加失败");
        }
    }

    /**
     * 修改部门信息
     *
     * @param position 对象
     * @return ReturnData对象 成功返回默认信息 失败返回错误信息和错误状态码
     */
    @Override
    public ReturnData updatePosition(Position position) {
        if (position != null) {
            Integer i = positionMapper.updatePosition(position);
            if (i != null) {
                return ReturnData.ok();
            } else {
                return ReturnData.error(ReturnConstant.FAIL, "没有找到对应的部门信息");
            }
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "没有获取到部门信息");
        }
    }

    /**
     * 根据部门id删除部门信息
     *
     * @param positionId 部门id
     * @return ReturnData对象 成功返回默认信息 失败返回错误信息和错误状态码
     */
    @Override
    public ReturnData deletePosition(int positionId) {
        //查询部门是否存在部员，存在部员无法删除
        Integer count = personnelService.findPositionPeoples(positionId,0);
        if (StringUtils.isNotNull(count)){
            return ReturnData.error(ReturnConstant.FAIL,"存在部员无法进行删除");
        }
        //删除部门信息
        Integer i = positionMapper.deletePosition(positionId);
        if (i != null) {
            return ReturnData.ok();
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "删除部门信息失败");
        }
    }
}
